package com.translator.model;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 语言模型类
 * 定义支持的语言及其相关操作
 */
public class Language {
    
    private String code;
    private String name;
    
    // 预定义的语言列表
    private static final List<Language> ALL_LANGUAGES = Arrays.asList(
        new Language("zh", "中文"),
        new Language("en", "英文"),
        new Language("ja", "日语"),
        new Language("ko", "韩语"),
        new Language("fr", "法语"),
        new Language("de", "德语"),
        new Language("es", "西班牙语"),
        new Language("it", "意大利语"),
        new Language("ru", "俄语"),
        new Language("pt", "葡萄牙语"),
        new Language("ar", "阿拉伯语"),
        new Language("hi", "印地语"),
        new Language("th", "泰语"),
        new Language("vi", "越南语")
    );
    
    /**
     * 创建语言对象
     * 
     * @param code 语言代码
     * @param name 语言名称
     */
    public Language(String code, String name) {
        this.code = code;
        this.name = name;
    }
    
    /**
     * 获取语言代码
     * 
     * @return 语言代码
     */
    public String getCode() {
        return code;
    }
    
    /**
     * 获取语言名称
     * 
     * @return 语言名称
     */
    public String getName() {
        return name;
    }
    
    /**
     * 获取所有支持的语言
     * 
     * @return 语言列表
     */
    public static List<Language> getAllLanguages() {
        return new ArrayList<>(ALL_LANGUAGES);
    }
    
    /**
     * 根据语言名称获取语言代码
     * 
     * @param name 语言名称
     * @return 语言代码，如果找不到则返回null
     */
    public static String getCodeByName(String name) {
        for (Language language : ALL_LANGUAGES) {
            if (language.getName().equals(name)) {
                return language.getCode();
            }
        }
        return null;
    }
    
    /**
     * 根据语言代码获取语言名称
     * 
     * @param code 语言代码
     * @return 语言名称，如果找不到则返回null
     */
    public static String getNameByCode(String code) {
        for (Language language : ALL_LANGUAGES) {
            if (language.getCode().equals(code)) {
                return language.getName();
            }
        }
        return null;
    }
    
    @Override
    public String toString() {
        return name;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        
        Language language = (Language) obj;
        return code.equals(language.code);
    }
    
    @Override
    public int hashCode() {
        return code.hashCode();
    }
}